package br.com.obardavez.translator;

import java.io.Serializable;
import java.util.Map.Entry;
import java.util.Set;

import br.com.obardavez.translator.impl.TranslatorImpl;

import com.google.inject.ImplementedBy;

@ImplementedBy(TranslatorImpl.class)
public interface Translator extends Serializable {

	/**
	 * Traduz o rotulo com a chave informada
	 * 
	 * @param key
	 *            Chave a ser traduzida
	 * @return Texto que representa a chave informada
	 */
	String translateLabel(String key);

	/**
	 * Traduz o rotulo com a chave informada aplicando os parametros informados
	 * 
	 * @param key
	 *            Chave a ser traduzida
	 * @param params
	 *            Parametros que serao aplicados
	 * @return Texto que representa a chave informada ja atualizado com as
	 *         chaves informadas
	 */
	String translateLabel(String key, String... params);

	/**
	 * Traduz a mensagem com a chave informada
	 * 
	 * @param key
	 *            Chave a ser traduzida
	 * @return Texto que representa a chave informada
	 */
	String translateMessage(String key);

	/**
	 * Traduz a mensagem com a chave informada aplicando os parametros
	 * informados
	 * 
	 * @param key
	 *            Chave a ser traduzida
	 * @param params
	 *            Parametros que serao aplicados
	 * @return Texto que representa a chave informada ja atualizado com as
	 *         chaves informadas
	 */
	String translateMessage(String key, String... params);

	Set<Entry<Object, Object>> getMessages();

	Set<Entry<Object, Object>> getLabels();

}